home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / tex / td187src.lzh / MTAPPL.I < prev    next >
Text File  |  1991-06-08  |  20KB  |  738 lines

  1. (*##########################################################################
  2.  
  3.               MagicAppl:    Basisfunktionen einer Applikation
  4.  
  5.   ##########################################################################
  6.   V2.01  27.01.91  Jens Pirnay          ARGV wird unterstützt
  7.   V2.00  17.10.90  Peter Hellinger      Anpassung an neues MagicSys
  8.                                         Die Implementationen für Megamax und
  9.                                         TDI-Modula unterscheiden sich nur 
  10.                                         noch durch Compilerswitches.
  11.   V1.03  18.08.90  Peter Hellinger
  12.   V1.02  14.08.90  Peter Hellinger
  13.   V1.01  16.07.90  Peter Hellinger       
  14.   V1.00  14.05.90  Peter Hellinger       Implementation TDI-Modula-2
  15.   ##########################################################################*)
  16.  
  17. IMPLEMENTATION MODULE mtAppl;
  18.  
  19. (*------------------------------*)
  20. (*       COMPILERSWITCHES       *)
  21. (*------------------------------*)
  22. (*  TDI-Version:   DEAKTIVIERT  *)
  23. (*------------------------------*)
  24. (* V-  Overflow-Checks          *)
  25. (* R-  Range-Checks             *)
  26. (* S-  Stack-Check              *)
  27. (* N-  NIL-Checks               *)
  28. (* T-  TDI-Compiler vor 3.01    *)
  29. (* Q+  Branch statt Jumps       *)
  30. (*                              *)
  31. (*------------------------------*)
  32. (*  MM2-Version:   DEAKTIVIERT  *)
  33. (*------------------------------*)
  34. (*$R-   Range-Checks            *)
  35. (*$S-   Stack-Check             *)
  36. (*                              *)
  37. (*------------------------------*)
  38.  
  39.  
  40. FROM SYSTEM     IMPORT  ADDRESS, ADR, LONGWORD, BYTE, TSIZE;
  41. FROM Storage    IMPORT  ALLOCATE, DEALLOCATE;
  42. FROM MagicVDI   IMPORT  UnloadFonts, SetTextface, SetCharpoints,
  43.                         InqFacename, SetTexteffect, InqTextextent, InqText; 
  44. FROM MagicSys   IMPORT  Nil, Null, Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6, Bit7,
  45.                         Bit8, Bit9, Bit10, Bit11, Bit12, Bit13, Bit14, Bit15,
  46.                         LOC, Byte, ByteSet, sWORD, sINTEGER, sCARDINAL, sBITSET,
  47.                         lWORD, lINTEGER, lCARDINAL, lBITSET,
  48.                         CastToChar, CastToByte, CastToByteset, CastToInt,
  49.                         CastToCard, CastToBitset, CastToWord, CastToLInt,
  50.                         CastToLCard, CastToLBitset, CastToLWord, CastToAddr,
  51.                         Terminate, Basepage;
  52. FROM MagicStrings  IMPORT  Append, Assign, Length;
  53. IMPORT  MagicTypes, MagicAES, MagicVDI, MagicDOS, MagicBIOS, MagicSys;
  54.  
  55. (*--------------------------------------------------------------------------*)
  56.  
  57. CONST   cFonts =        0;
  58.         cOpen =         1;
  59.         ABCGEM =        0210H;
  60.  
  61.  
  62. TYPE    WsPtr =         POINTER TO WsInfo;
  63.         WsInfo =        RECORD
  64.                          handle: sINTEGER;
  65.                          flags:  sBITSET;
  66.                          next:   WsPtr;
  67.                         END;
  68.  
  69.  
  70. TYPE    TermPtr =       POINTER TO TermInfo;
  71.         TermInfo =      RECORD
  72.                          proc:  PROC;
  73.                          next:  TermPtr;
  74.                         END;
  75.  
  76.  
  77. VAR     WorkInArray:    MagicVDI.tWorkIn;
  78.         WorkOutArray:   MagicVDI.tWorkOut;
  79.         applpath:       ARRAY [0..255] OF CHAR;
  80.  
  81. VAR     WorkStation:    WsPtr;
  82.         TermProc:       TermPtr;
  83.  
  84. VAR     pCount:         sINTEGER;
  85.         ProgReturn:     sINTEGER;
  86.         stack:          ADDRESS;
  87.         BasePage:       MagicBIOS.PtrPD;
  88.         Maus:           BOOLEAN; 
  89.         MausForm:       sINTEGER;
  90.         Usermaus:       ADDRESS;
  91.         GEMversion:     sINTEGER;
  92.         gdos:           BOOLEAN;
  93.         argv:           BOOLEAN;
  94.         argpos:         sINTEGER;
  95.         cmdline:        ARRAY [0..127] OF CHAR;
  96.  
  97.  
  98. PROCEDURE ApplInit;
  99. VAR i: sINTEGER;
  100. BEGIN
  101.  (* Applikation anmelden *)
  102.  ApplIdent:= MagicAES.ApplInit ();
  103.  IF ApplIdent < 0 THEN  HALT; END;
  104.  (* Eine Workstation öffnen *)
  105.  VDIHandle:= OpenWorkstation();
  106.  (* Gesamtbreite und Höhe des Bildschirms *)
  107.  MaxWidth:= WorkOutArray[0] + 1;
  108.  MaxHeight:= WorkOutArray[1] + 1;
  109.  Bitplanes:= MagicAES.AESGlobal.apNplanes;
  110.  GEMversion:= MagicAES.AESGlobal.apVersion;
  111.  IF GEMversion # ABCGEM THEN  gdos:= MagicSys.VqGdos();
  112.                         ELSE  gdos:= TRUE;
  113.  END;
  114.  Maus:= TRUE;  MausForm:= MagicAES.ARROW;  MouseOn;
  115. END ApplInit;
  116.  
  117.  
  118. PROCEDURE InstallTermproc (proc: PROC);
  119. VAR p: TermPtr;
  120.  
  121.  PROCEDURE new (): TermPtr;
  122.  VAR q: TermPtr;
  123.  BEGIN
  124.   NEW (q);
  125.   IF q = NIL THEN  HALT;  END;
  126.   q^.proc:= proc;
  127.   q^.next:= NIL;
  128.   RETURN q;
  129.  END new;
  130.  
  131. BEGIN
  132.  IF TermProc = NIL THEN
  133.   TermProc:= new ();
  134.  ELSE
  135.   p:= TermProc;
  136.   WHILE p^.next # NIL DO  p:= p^.next;  END;
  137.   p^.next:= new ();
  138.  END;
  139. END InstallTermproc;
  140.  
  141.  
  142. PROCEDURE ApplTerm (return: sINTEGER);
  143. VAR  p: TermPtr;
  144.      q: WsPtr;
  145.      i: sINTEGER;
  146. BEGIN
  147.  (* Installierte TermProcedures abarbeiten *)
  148.  p:= TermProc;
  149.  WHILE (p # NIL) DO  p^.proc;  p:= p^.next;  END;
  150.  (* Cursor wieder sichtbar machen *)
  151.  MagicVDI.ShowCursor (VDIHandle, TRUE);
  152.  q:= WorkStation;
  153.  WHILE (q # NIL) DO
  154.   IF cFonts IN q^.flags THEN  MagicVDI.UnloadFonts (q^.handle, 0);  END;
  155.   MagicVDI.CloseVirtual (q^.handle);
  156.   q:= q^.next;
  157.  END; (* WHILE *)
  158.  MagicAES.ApplExit;
  159.  Terminate (return);
  160. END ApplTerm;
  161.  
  162.  
  163. PROCEDURE ApplPath (VAR pfad: ARRAY OF CHAR);
  164. BEGIN
  165.  Assign (applpath, pfad);
  166. END ApplPath;
  167.  
  168.  
  169. PROCEDURE OpenWorkstation (): sINTEGER;
  170. VAR h, i: sINTEGER;
  171.     p:    WsPtr;
  172.  
  173.  PROCEDURE new (handle: sINTEGER; flags: BITSET): WsPtr;
  174.  VAR q: WsPtr;
  175.  BEGIN
  176.   NEW (q);
  177.   IF q = NIL THEN  HALT;  END;
  178.   q^.handle:= handle;
  179.   q^.flags:=  flags;
  180.   q^.next:=   NIL;
  181.   RETURN q;
  182.  END new;
  183.  
  184. BEGIN
  185.  (* Handle der physikalischen Workstation ermitteln *)
  186.  MagicAES.GrafHandle (h, i, i, i, i);
  187.  IF h < 0 THEN  HALT;  END;
  188.  WorkInArray[ 0]:= 1;  (* Aktuelle Auflösung                *)
  189.  WorkInArray[ 1]:= 1;  (* Linientyp, durchgehender Strich   *)
  190.  WorkInArray[ 2]:= 1;  (* Liniefarbe, schwarz               *)
  191.  WorkInArray[ 3]:= 1;  (* Markertyp, Punkt                  *)
  192.  WorkInArray[ 4]:= 1;  (* Markerfarbe, schwarz              *)
  193.  WorkInArray[ 5]:= 1;  (* Textfont, Systemzeichensatz       *)
  194.  WorkInArray[ 6]:= 1;  (* Textfarbe, schwarz                *)
  195.  WorkInArray[ 7]:= 1;  (* Fülltyp, voll                     *)
  196.  WorkInArray[ 8]:= 1;  (* Musterindex,                      *)
  197.  WorkInArray[ 9]:= 1;  (* Musterfarbe, schwarz              *)
  198.  WorkInArray[10]:= 2;  (* RC-Koordinatensystem              *)
  199.  (* Virtuelle Workstation öffnen *)
  200.  MagicVDI.OpenVirtual (WorkInArray, h, WorkOutArray);
  201.  IF h < 0 THEN  HALT;  END;
  202.  IF WorkStation = NIL THEN
  203.   WorkStation:= new (h, {cOpen});
  204.  ELSE
  205.   p:= WorkStation;
  206.   WHILE p^.next # NIL DO  p:= p^.next;  END;
  207.   p^.next:= new (h, {cOpen});
  208.  END;
  209.  RETURN h;
  210. END OpenWorkstation;
  211.  
  212.  
  213. PROCEDURE GetWS (handle: sINTEGER): WsPtr;
  214. VAR p: WsPtr;
  215. BEGIN
  216.  p:= WorkStation;
  217.  WHILE p # NIL DO
  218.   IF p^.handle = handle THEN  RETURN p;  END;
  219.   p:= p^.next;
  220.  END;
  221.  RETURN NIL;
  222. END GetWS;
  223.  
  224.  
  225. PROCEDURE CloseWorkstation (handle: sINTEGER);
  226. VAR p, q: WsPtr;
  227. BEGIN
  228.  p:= GetWS (handle);
  229.  IF p # NIL THEN
  230.   IF cOpen IN p^.flags THEN
  231.    IF cFonts IN p^.flags THEN  UnloadFonts (p^.handle, 0);  END;
  232.    MagicVDI.CloseVirtual (p^.handle);
  233.    EXCL (p^.flags, cOpen);
  234.   END;
  235.  END; (* IF *)
  236. END CloseWorkstation;
  237.  
  238.  
  239. (*----------------------------------------------------------------------*
  240.  *                            Mäusetreiberei                            *
  241.  *----------------------------------------------------------------------*)
  242.  
  243. PROCEDURE MouseOn;
  244. BEGIN
  245.  IF NOT Maus THEN
  246.   Maus:= TRUE;
  247.   MagicVDI.ShowCursor (VDIHandle, FALSE);
  248.  END;
  249.  IF MausForm = MagicAES.USERDEF THEN
  250.   MagicAES.GrafMouse (MausForm, Usermaus);
  251.  ELSE
  252.   MagicAES.GrafMouse (MausForm, Nil);
  253.  END;
  254. END MouseOn;
  255.  
  256.  
  257. PROCEDURE MouseArrow;
  258. BEGIN
  259.  MausForm:= MagicAES.ARROW;  MouseOn;
  260. END MouseArrow;
  261.  
  262.  
  263. PROCEDURE MouseCursor;
  264. BEGIN
  265.  MausForm:= MagicAES.TEXTCRSR;  MouseOn;
  266. END MouseCursor;
  267.  
  268.  
  269. PROCEDURE MouseBusy;
  270. BEGIN
  271.  MausForm:= MagicAES.BUSYBEE;  MouseOn;
  272. END MouseBusy;
  273.  
  274.  
  275. PROCEDURE